    package com.study.bigevent.controller;

    import com.study.bigevent.pojo.Result;
    import com.study.bigevent.pojo.User;
    import com.study.bigevent.service.UserService;
    import com.study.bigevent.utils.JwtUtil;
    import com.study.bigevent.utils.Md5Util;
    import com.study.bigevent.utils.ThreadLocalUtil;
    import jakarta.validation.constraints.Pattern;
    import org.hibernate.validator.constraints.URL;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.util.StringUtils;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.*;

    import java.util.HashMap;
    import java.util.Map;

    @RestController
    @RequestMapping("/user")
    @Validated
    public class UserController {
        @Autowired
        private UserService userService;
        @RequestMapping("/register")
        public Result register(@Pattern(regexp = "^\\S{5,16}$") String username,
                               @Pattern(regexp = "^\\S{5,16}$")String password){
            User u = userService.findByUserName(username);
            if(u == null){
                userService.register(username, password);
                return Result.success();
            }else{
                return Result.error("用户名已存在");

            }
        }
        @RequestMapping("/login")
        public Result<String> login(@Pattern(regexp = "^\\S{5,16}$") String username,
                                    @Pattern(regexp = "^\\S{5,16}$") String password){
            User loginUser = userService.findByUserName(username);
            if(loginUser == null){
                return Result.error("用户名错误");
            }
            if (Md5Util.getMD5String(password).equals(loginUser.getPassword())){
                Map<String, Object> claims = new HashMap<>();
                claims.put("id", loginUser.getId());
                claims.put("username", loginUser.getUsername());
                String token = JwtUtil.genToken(claims);
                return Result.success(token);
            }
            return Result.error("密码错误");
        }
        @RequestMapping("/userInfo")
        public Result<User> userinfo(/*@RequestHeader(name = "Authorization") String token*/){
//            Map<String, Object> map = JwtUtil.parseToken(token);
//            String username =(String) map.get("username");
            Map<String, Object> map = ThreadLocalUtil.get();
            String username = (String) map.get("username");

            User user = userService.findByUserName(username);
            return Result.success(user);
        }
        @PutMapping("update")
        public Result update(@RequestBody @Validated User user){
            userService.update(user);
            return Result.success();
        }
        @PatchMapping("updateAvatar")
        public Result updateAvatar(@RequestParam @URL String avatarUrl){
            userService.updateAvatar(avatarUrl);
            return Result.success();
        }
        @PatchMapping("updatePwd")
        public Result updatePwd(@RequestBody Map<String, String> params){
            String oldPwd = params.get("old_pwd");
            String newPwd = params.get("new_pwd");
            String rePwd = params.get( "re_pwd");
            if(!StringUtils.hasLength(oldPwd)||!StringUtils.hasLength(newPwd)||!StringUtils.hasLength(rePwd)){
                return Result.error("缺少必要参数");
            }
            Map<String, Object> map = ThreadLocalUtil.get();
            String username = (String) map.get("username");
            userService.findByUserName(username);
            User loginuser = userService.findByUserName(username);
            if(!loginuser.getPassword().equals(Md5Util.getMD5String(oldPwd))){
                return Result.error(("密码填写错误"));
            }
            if (!rePwd.equals(newPwd)){
                return Result.error("密码填写不一致");
            }
            userService.updatePwd(newPwd);
            return Result.success();
        }
    }
